home *** CD-ROM | disk | FTP | other *** search
/ Computer Inter@ctive 17 / Computer Interactive cdrom 17 - gen 99.iso / ZDNETIT / CONTENT / IMSWBPRO.ZIP / _setup.1 / vmmech.js < prev    next >
Encoding:
Text File  |  1998-10-06  |  32.5 KB  |  1,270 lines

  1. //<!--
  2. //*****************************************************************************//
  3. // (C) Copyright Virtual Mechanics 1998 Version 1.0, All rights reserved.//                //
  4. // All copies of this software must include this Copyright notice.             //
  5. //*****************************************************************************//
  6. nm = new Array();
  7. Active = new Array();   // active state of object
  8. ob   = new Array();
  9. cpox = new Array();        // current x
  10. cpoy = new Array();        // current y
  11. spox = new Array();        // start x
  12. spoy = new Array();        // start y
  13. var Lpox;
  14. var Lpoy;
  15. dpox = new Array();
  16. dpoy = new Array();
  17. atDis  = new Array();
  18. DisPt  = new Array();
  19. disStep = new Array();
  20. Plen = new Array();
  21. Path = new Array();
  22. obRef= new Array();
  23. Gtyp = new Array();
  24. Gnpt=new Array();
  25. Gnam = new Array();
  26. Glen = new Array();
  27. Gszx = new Array();
  28. Gszy = new Array();
  29. Gorx = new Array();
  30. Gory = new Array();
  31. Gpxl = new Array();
  32. Gpyl = new Array();
  33. Gbrl = new Array();
  34. Gbrt = new Array();
  35. Gbrr = new Array();
  36. Gbrb = new Array();
  37. Grps = new Array();
  38. Grpl = new Array();
  39. Gspt = new Array();
  40. PathCount = new Array();
  41. LastPt  = new Array();
  42. lstVal = new Array();
  43.  
  44. TimeLeft = new Array();
  45. AEvent = new Array();
  46. WDEvent = new Array();
  47. WAEvent = new Array();
  48. AValue = new Array();
  49. ATime = new Array();
  50. AEnter = new Array();
  51. ALeave = new Array();
  52. AKey = new Array();
  53. IKey = new Array();
  54. DEvent = new Array();
  55. DValue = new Array();
  56. DTime = new Array();
  57. DEnter = new Array();
  58. DLeave = new Array();
  59. DAKey = new Array();
  60. DIKey = new Array();
  61. WASOp  = new Array();
  62. WAGOp  = new Array();
  63. OpForm = new Array();
  64. WAAObj = new Array();
  65. WADObj = new Array();
  66. WAForm = new Array();
  67. WASVal = new Array();
  68. WAGVal = new Array();
  69. WACgeo = new Array();
  70. WACsnd = new Array();
  71. WACact = new Array();
  72. WACevt = new Array();
  73. WACatt = new Array();
  74. WACobj = new Array();
  75. WANobj = new Array();
  76. WALink = new Array();
  77. WDAObj = new Array();
  78. WDDObj = new Array();
  79. EndPath = new Array();
  80. MType = new Array();
  81.  
  82. MPath  = new Array();
  83. MRate  = new Array();
  84. MTime  = new Array();
  85. MDelay = new Array();
  86. MRepeat= new Array();
  87. MCount = new Array();
  88. MDir   = new Array();
  89. MGWst  = new Array();
  90. MGNth  = new Array();
  91. MGEst  = new Array();
  92. MGSth  = new Array();
  93.  
  94. eDELAY = (1);
  95. eDELAY_TIME = (2);
  96. eMOUSE = (4);
  97. eMOUSE_OVER = (8);
  98. eLMOUSE = (16);
  99. eRMOUSE = (32);
  100. eKEY = (64);
  101. eOBJECT_ENTER = (128);
  102. eOBJECT_ENTER_LIST = (256);
  103. eOBJECT_LEAVE = (512);
  104. eOBJECT_LEAVE_LIST = (1024);
  105. eLT_VALUE =    (2048);
  106. eEQ_VALUE = (4096);
  107. eGT_VALUE =    (8192);
  108. eVALUE      = (16384);
  109. eENDPATH  = (32768);
  110. eACTIVATE_1 = (65536);
  111. eACTIVATE_2    = (131072);
  112. eANDtest = (1<<30);
  113. var pageTime = -1;// link timer
  114. var Cobj;    // current object
  115. var Catt;    // current object-attribute
  116. var Cact;    // current object-action
  117. var Cevt;    // current object-event
  118. var Cgrp;    // current object-group
  119. var Cgeo;    // current object-geometry
  120. var Cpob;    // current path-object
  121. var Gpgo;    // current path-object geometry
  122. var gcx;    // current object x position
  123. var gcy;    // current object y position
  124. var gcx;    // object x displacement within group
  125. var gcy;    // object x displacement within group
  126. var cmx = 0;
  127. var cmy = 0;
  128. var smx = -9999;
  129. var smy = -9999;
  130. var slm = 0;
  131. var llm = -9999;
  132. var sky = " ";
  133.  
  134. var lmx = -9999;
  135. var lmy = -9999;
  136. var lky = 0;
  137. var totObj;
  138. var mS;
  139. var mW;
  140. var waitTime;
  141. var GEO_TYPE = 7;
  142. var GEO_OPEN = 8;
  143. var GEO_COUNT= 32;
  144. ACT_XPATH_STOP     =(0);
  145. ACT_XPATH_OBJPTH =(1<<0);
  146. ACT_XPATH_OBJXYZ =(1<<1);
  147. ACT_XPATH_LEFT   =(1<<2);
  148. ACT_XPATH_RIGHT  =(1<<3);
  149. ACT_XPATH_MOUSE     =(1<<4);
  150. ACT_YPATH_STOP     =(0);
  151. ACT_YPATH_OBJPTH =(1<<8);
  152. ACT_YPATH_OBJXYZ =(1<<9);
  153. ACT_YPATH_UP     =(1<<10);
  154. ACT_YPATH_DOWN   =(1<<11);
  155. ACT_YPATH_MOUSE     =(1<<12);
  156. ACT_ZPATH_STOP     =(0);
  157. ACT_ZPATH_OBJPTH =(1<<16);
  158. ACT_ZPATH_OBJXYZ =(1<<17);
  159. ACT_ZPATH_IN     =(1<<18);
  160. ACT_ZPATH_OUT     =(1<<19);
  161. ACT_ZPATH_KEY     =(1<<20);
  162. ACT_PATH_STOP     =(0);
  163. ACT_PATH_START     =(1<<24);
  164. ACT_PATH_CENTER     =(1<<25);
  165. ACT_PATH_END     =(1<<26);
  166. ACT_GEO_WEST     =(1<<28);
  167. ACT_GEO_EAST     =(1<<29);
  168. ACT_GEO_NORTH    =(1<<30);
  169. ACT_GEO_SOUTH    =(1<<31);
  170. ACT_SETX         =(0xffffff00);
  171. ACT_SETY         =(0xffff00ff);
  172. ACT_SETZ         =(0xff00ffff);
  173. ACT_SETO         =(0xf0ffffff);
  174. ACT_SETF         =(0x0fffffff);
  175. ACT_GETX         =(0x000000ff);
  176. ACT_GETY         =(0x0000ff00);
  177. ACT_GETZ         =(0x00ff0000);
  178. ACT_GETO         =(0x0f000000);
  179. ACT_GETF         =(0xf0000000);
  180.  
  181. /**************************************************************************/
  182. var isNav4 = false, isIE4 = false;
  183. if (navigator.appVersion.charAt(0) >= "4") {
  184.     if (navigator.appName == "Netscape") {
  185.         isNav4 = true;
  186.         window.captureEvents(Event.MOUSEUP|Event.MOUSEDOWN|Event.MOUSEMOVE|Event.KEYPRESS);
  187.         window.onmousedown=NNmouseDown;
  188.         window.onmouseup=NNmouseUp;
  189.         window.onmousemove=NNmouseMove;
  190.         window.onkeypress=NNkeyPress;
  191.     }
  192.     else if (navigator.appVersion.indexOf("MSIE") != -1) {
  193.         window.document.onmousemove = IEmouseMove;
  194.         window.document.onkeypress  = IEkeyPress;
  195.         window.document.onmousedown = IEmouseDown;
  196.         window.document.onmouseup   = IEmouseUp;
  197.         window.document.onkeydown   = IEkeyPress;
  198.         window.document.ondragstart = IECancelEvent;
  199.         isIE4 = true;
  200.     }
  201. }
  202. /**************************************************************************/
  203. function NNmouseMove(e) {
  204.     cmx = e.pageX;
  205.     cmy = e.pageY;
  206. }
  207. function NNmouseDown(e) {
  208.     slm = slm | 1;
  209.     window.releaseEvents(Event.MOUSEMOVE);
  210.     window.releaseEvents(Event.MOUSEDOWN);
  211.     document.captureEvents(Event.MOUSEMOVE|Event.MOUSEDOWN);
  212.     document.onmousemove=drag;
  213.     document.onmouseup=enddrag;
  214.     smx=e.pageX;
  215.     smy=e.pageY;
  216.     return true;
  217. }
  218. function enddrag(e) {
  219.     slm = slm | 2;
  220.     smx = e.pageX;
  221.     smy = e.pageY;
  222.     document.onmousemove=0;
  223.     document.releaseEvents(Event.MOUSEMOVE);
  224.     document.releaseEvents(Event.MOUSEUP);
  225.     window.captureEvents(Event.MOUSEMOVE|Event.MOUSEDOWN|Event.KEYPRESS);
  226.     return false;
  227. }
  228. function drag(e) {
  229.     cmx = e.pageX;
  230.     cmy = e.pageY;
  231. }
  232.  
  233. function NNmouseUp(e) {
  234.     slm = slm | 2;
  235.     smx = e.pageX;
  236.     smy = e.pageY;
  237. }
  238.  
  239. function NNkeyPress(e) {
  240.     sky = String.fromCharCode(e.which);
  241. }
  242.  
  243. function IEmouseMove() {
  244.     cmx = window.event.x;
  245.     cmy = window.event.y;
  246. }
  247.  
  248. function IEmouseDown() {
  249.     slm = slm | 1;
  250.     smx = window.event.x;
  251.     smy = window.event.y;
  252. }
  253.  
  254. function IEmouseUp() {
  255.     slm = slm | 2;
  256.     smx = window.event.x;
  257.     smy = window.event.y;
  258. }
  259.  
  260. function IEkeyPress() {
  261.     sky = window.event.keyCode;
  262. }
  263. function IECancelEvent() {
  264.     window.event.returnValue=false;
  265. }
  266. /**************************************************************************/
  267. function Setup() {
  268. // setup defaults
  269.     tmCount=0;
  270.  
  271.     obRef[0] = 0;
  272.     ob[0] = new Array();
  273.     ob[0] = 0;
  274.     ob[0].name = "Geo0";
  275.     ob[0].geo = 0;
  276.     ob[0].att = 0; 
  277.     ob[0].evt = 0; 
  278.     ob[0].act = 0;
  279.     ob[0].grp = 0;
  280.     ob[0].cpox =0.000000;
  281.     ob[0].cpoy =0.000000;
  282.     ob[0].cscx =1.000000;
  283.     ob[0].cscy =1.000000;
  284.     ob[0].crot =0.000000;
  285.     ob[0].flg = 0;
  286.  
  287.     MPath[0]  = 0;
  288.  
  289.     for(nob=1; nob<= pageObj; nob++) {
  290.         ref = pObjLst[nob];
  291.         cobj = obRef[ref];
  292.         spox[cobj] = ob[cobj].cpox;  
  293.         spoy[cobj] = ob[cobj].cpoy;
  294.         SetPath(cobj);
  295.  
  296.         reset(cobj);
  297.  
  298.         if(ob[cobj].flg & 16)
  299.             Active[cobj]    =  1;    // set to initial active state
  300.     }
  301. }
  302.  
  303. /***************************************************************************/
  304. function ticktime() {
  305.     doObjectList();
  306.     window.setTimeout("ticktime();", waitTime, "JavaScript");
  307. }
  308.  
  309. function doObjectList() {
  310. //    window.norefresh;
  311.     if(pageTime >= 0)
  312.     {
  313.         tmCount++;
  314.         if(tmCount > pageTime) 
  315.         {
  316.             window.location=pgLink;
  317.             pageTime = -1;
  318.         }
  319.     }
  320.  
  321.     if(lmx == smx) smx = -99999;
  322.     if(lmy == smy) smy = -99999;
  323.     if(lky == sky) sky = " ";
  324.     llt = 0;
  325.     if((llm & 2) == (slm & 2)) slm = (slm  & ~2);
  326.     if((llm & 1) == (slm & 1)) slm = (slm  & ~1);
  327.     lmx = smx;
  328.     lmy = smy;
  329.     lky = sky;
  330.     llm = slm;
  331.  
  332.     for(nob=1; nob<= pageObj; nob++) {
  333.         ref = pObjLst[nob];
  334.         gcx = 0;
  335.         gcy = 0;
  336.         cobj = obRef[ref]
  337.         Cgrp = ob[cobj].grp;
  338.         if(!Cgrp) doObject(cobj);
  339.     }
  340. }
  341.  
  342. function doObject(cobj)
  343. {
  344.     Cobj = cobj;
  345.     Cgeo = ob[Cobj].geo;
  346.     Cevt = ob[Cobj].evt;
  347.     Catt = ob[Cobj].att;
  348.     Cact = ob[Cobj].act;
  349.  
  350.     if(Cact)
  351.     {            
  352.         Cpob = MPath[Cact];    // Object actions path object
  353.         if(Cpob)
  354.             Cpgo = ob[Cpob].geo;// Path objects geometry
  355.         else
  356.             Cpgo = 0;
  357.     }
  358.     else
  359.     {
  360.         Cpob = 0;
  361.         Cpgo = 0;
  362.     }
  363.  
  364.     if(Cevt) Evtest();
  365.  
  366.     if     (Active[Cobj] == 4) whenActive();
  367.     else if(Active[Cobj] == 2) whenDeactive();
  368.     else if(Active[Cobj] == 1) isActive();
  369.     else if(Active[Cobj] == 0) isDeactive();
  370.  
  371.     if(Cgeo && (Gtyp[Cgeo] & (1<<4)))
  372.     { 
  373.         doGroup(Cgeo);
  374.         return;
  375.     }
  376.  
  377. }
  378. function doGroup(cgrp)
  379. {
  380.     var gobj;
  381.     gcx = cpox[Cobj];
  382.     gcy = cpoy[Cobj];
  383.     gobj = Cobj;
  384.     for(i = 0; i < Grps[cgrp]; i++)
  385.     { 
  386.         doObject(Grpl[cgrp][i]);
  387.         ob[Cobj].style.left=gcx+cpox[Cobj] - Gszx[Cgeo] * ob[Cobj].cscx;
  388.         ob[Cobj].style.top =gcy+cpoy[Cobj] - Gszy[Cgeo] * ob[Cobj].cscy;
  389.     }
  390.     return;
  391. }
  392. /*************************************************************************/
  393. function UpdPos() {
  394. Lpox = cpox[Cobj];
  395. Lpoy = cpoy[Cobj];
  396. // end of path condition
  397. if(Plen[Cobj] > 0 && atDis[Cobj] >= Plen[Cobj]) 
  398. {
  399.     atDis[Cobj] -= Plen[Cobj];
  400.     DisPt[Cobj]  = 0;
  401.     LastPt[Cobj] = 0;
  402.     cpox[Cobj]   = spox[Cobj];
  403.     cpoy[Cobj]   = spoy[Cobj];
  404. }
  405. if(MType[Cact] & ACT_XPATH_OBJXYZ) 
  406. {
  407.     cpox[Cobj] = cpox[Cpob];
  408.     cpoy[Cobj] = cpoy[Cpob];
  409. }
  410. else if(MType[Cact] & ACT_XPATH_OBJPTH)
  411. {
  412.     if     ((Gtyp[Cpgo] & GEO_TYPE) == 1)
  413.         GetRectLoc();
  414.     else if((Gtyp[Cpgo] & GEO_TYPE) == 2) 
  415.     {
  416.         GetArcLoc();
  417.     }
  418.     else if((Gtyp[Cpgo] & GEO_TYPE) == 3)
  419.     {
  420.         GetPathLoc();
  421.     }
  422.     cpox[Cobj] += cpox[Cpob];
  423.     cpoy[Cobj] += cpoy[Cpob];
  424. }
  425. else
  426. {
  427.     if(MType[Cact] & ACT_XPATH_MOUSE)
  428.         cpox[Cobj] = cmx;
  429.     else
  430.         cpox[Cobj] += dpox[Cobj]; //^^ is this STOP?
  431.  
  432.     if(MType[Cact] & ACT_YPATH_MOUSE)
  433.         cpoy[Cobj] = cmy;
  434.     else
  435.         cpoy[Cobj] += dpoy[Cobj];
  436. }
  437. ob[Cobj].style.left=cpox[Cobj] - Gszx[Cgeo] * ob[Cobj].cscx;
  438. ob[Cobj].style.top =cpoy[Cobj] - Gszy[Cgeo] * ob[Cobj].cscy;
  439. if(Plen[Cobj] != 0) atDis[Cobj] += disStep[Cobj];
  440.  
  441. if(Plen[Cobj] > 0 && atDis[Cobj] >= Plen[Cobj]) 
  442. {
  443.     if(PathCount[Cobj] > 0) PathCount[Cobj]--;
  444.     if(PathCount[Cobj] == 0) EndPath[Cobj] = 1;
  445. }
  446. if(Cact) UpdGeo();
  447. return;
  448. }
  449.  
  450. function UpdGeo() {
  451.     var drx = Lpox - cpox[Cobj];
  452.     var dry = Lpoy - cpoy[Cobj];
  453.     if(Math.abs(dry) > Math.abs(drx))
  454.     {
  455.         if    ((dry < 0) && (MDir[Cobj] != 270))
  456.         {
  457.             if(MType[Cact] & (ACT_GEO_SOUTH))
  458.             {
  459.                 ob[Cobj].image.src = Gspt[MGSth[Cact]].src;
  460.             }
  461.             MDir[Cobj] = 270;
  462.         }
  463.         else  if((dry >= 0) && MDir[Cobj] != 90)
  464.         {
  465.             if(MType[Cact] & (ACT_GEO_NORTH))
  466.             { 
  467.                 ob[Cobj].image.src = Gspt[MGNth[Cact]].src;
  468.             }
  469.             MDir[Cobj] = 90;
  470.         }
  471.     }
  472.     else
  473.     {
  474.         if    ((drx > 0) && (MDir[Cobj] != 0))
  475.         {
  476.             if(MType[Cact] & (ACT_GEO_WEST))
  477.             { 
  478.                 ob[Cobj].image.src = Gspt[MGWst[Cact]].src;
  479.             }
  480.             MDir[Cobj] = 0;
  481.         }
  482.         else  if((drx <= 0) && MDir[Cobj] != 180)
  483.         {
  484.             if(MType[Cact] & (ACT_GEO_EAST))
  485.             { 
  486.                 ob[Cobj].image.src = Gspt[MGEst[Cact]].src;
  487.             }
  488.             MDir[Cobj] = 180;
  489.         }
  490.     }
  491. return;
  492. }
  493.  
  494. function UpdStr() {
  495.     if(lstVal[Cobj] == ob[Cobj].val) return;
  496.     lstVal[Cobj] = ob[Cobj].val;
  497.     if(isIE4)
  498.         ob[Cobj].name.innerText = ob[Cobj].val;
  499.     else
  500.         window.status = "Object " + ob[Cobj].name + " Counter=" + ob[Cobj].val;
  501.  
  502.     return;
  503. }
  504. /**************************************************************************/
  505. function GetArcLoc() {
  506. if(MRate[Cact] > 0) 
  507. {
  508.     cpox[Cobj] = (Math.sin(0.017453292*(-atDis[Cobj]-90)) * Gszx[Cpgo]) * ob[Cpob].cscx;
  509.     cpoy[Cobj] = (Math.cos(0.017453292*(-atDis[Cobj]-90)) * Gszy[Cpgo]) * ob[Cpob].cscy;
  510. }
  511. else 
  512. {
  513.     cpox[Cobj] = (Math.sin(0.017453292*(atDis[Cobj]-90)) * Gszx[Cpgo]) * ob[Cpob].cscx;
  514.     cpoy[Cobj] = (Math.cos(0.017453292*(atDis[Cobj]-90)) * Gszy[Cpgo]) * ob[Cpob].cscy;
  515. }
  516. return;
  517. }
  518. /*************************************************************************/
  519. function GetPathLoc() {
  520. var cPt, nPt, x, y, dis=0.0, ratio=0.0, ct = 0;
  521.  
  522. if(MRate[Cact] > 0) 
  523. {
  524.     while(ct <= Gnpt[Cpgo]) 
  525.     {
  526.         ct ++;
  527.         if(LastPt[Cobj]+1 < Gnpt[Cpgo]) 
  528.         {
  529.             cPt = LastPt[Cobj];
  530.             nPt = cPt + 1; 
  531.         }
  532.         else 
  533.         {
  534.             if(Gtyp[Cpgo] & GEO_OPEN) 
  535.             {
  536.                 LastPt[Cobj]  = 0;
  537.                 cPt = 0;
  538.                 nPt = 1; 
  539.             }
  540.             else 
  541.             {
  542.                 LastPt[Cobj]  = Gnpt[Cpgo]-1;
  543.                 cPt = LastPt[Cobj];
  544.                 nPt = 0; 
  545.             }
  546.         }
  547.         x  = (Gpxl[Cpgo][nPt] - Gpxl[Cpgo][cPt]) * ob[Cpob].cscx;
  548.         y  = (Gpyl[Cpgo][nPt] - Gpyl[Cpgo][cPt]) * ob[Cpob].cscy;
  549.         dis = Math.sqrt(x*x + y*y);
  550.         if(atDis[Cobj] < (dis + DisPt[Cobj])) break;
  551.         DisPt[Cobj] += dis;
  552.         LastPt[Cobj]++;
  553.         if(LastPt[Cobj] >= Gnpt[Cpgo]) 
  554.         {
  555.             cPt = 0;
  556.             nPt = 1;
  557.         }
  558.     }
  559.     ratio = (atDis[Cobj] - DisPt[Cobj]) / dis;
  560.     cpox[Cobj] = Gpxl[Cpgo][cPt] * ob[Cpob].cscx + x * ratio;
  561.     cpoy[Cobj] = Gpyl[Cpgo][cPt] * ob[Cpob].cscy + y * ratio;
  562.  
  563.     return;
  564. }
  565. else 
  566. {
  567.     while(ct <= Gnpt[Cpgo]) 
  568.     {
  569.         ct ++;
  570.         if(LastPt[Cobj] > 0) 
  571.         {
  572.             cPt = LastPt[Cobj];
  573.             nPt = cPt - 1; 
  574.         }
  575.         else 
  576.         {
  577.             if(Gtyp[Cpgo] & GEO_OPEN) 
  578.             {
  579.                 LastPt[Cobj]  = 0;
  580.                 cPt = Gnpt[Cpgo]-1;
  581.                 nPt = cPt-1; 
  582.             }
  583.             else 
  584.             {
  585.                 LastPt[Cobj]  = Gnpt[Cpgo]-1;
  586.                 cPt = LastPt[Cobj];
  587.                 nPt = cPt-1; 
  588.             }
  589.         }
  590.         x  = (Gpxl[Cpgo][nPt] - Gpxl[Cpgo][cPt]) * ob[Cpob].cscx;
  591.         y  = (Gpyl[Cpgo][nPt] - Gpyl[Cpgo][cPt]) * ob[Cpob].cscy;
  592.         dis = Math.sqrt(x*x + y*y);
  593.         if(atDis[Cobj] < (dis + DisPt[Cobj])) break;
  594.         DisPt[Cobj] += dis;
  595.         LastPt[Cobj]--;
  596.         if(LastPt[Cobj] < 0) 
  597.         {
  598.             cPt = 0;
  599.             nPt = 1;
  600.         }
  601.     }
  602.     ratio = (atDis[Cobj] - DisPt[Cobj]) / dis;
  603.     cpox[Cobj] = Gpxl[Cpgo][cPt] * ob[Cpob].cscx + x * ratio;
  604.     cpoy[Cobj] = Gpyl[Cpgo][cPt] * ob[Cpob].cscy + y * ratio;
  605.  
  606.     return;
  607. }
  608. }
  609. /************************************************************************/
  610. function GetRectLoc() 
  611. {
  612. var dis = 0.0;
  613.  
  614. while (0==0) 
  615. {
  616.     if(MRate[Cact] > 0) 
  617.     {
  618.         if(LastPt[Cobj] == 0) 
  619.         {
  620.             dis = (Gpxl[Cpgo][1] - Gpxl[Cpgo][0]) * ob[Cpob].cscx;
  621.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  622.             {
  623.                 cpox[Cobj] = Gpxl[Cpgo][0] * ob[Cpob].cscx + atDis[Cobj];
  624.                 cpoy[Cobj] = Gpyl[Cpgo][0] * ob[Cpob].cscy;
  625.                 break; 
  626.             }
  627.             LastPt[Cobj] = 1;
  628.             DisPt[Cobj] += dis; 
  629.         }
  630.         if(LastPt[Cobj] == 1) 
  631.         {
  632.             dis = (Gpyl[Cpgo][1] - Gpyl[Cpgo][0]) * ob[Cpob].cscy;
  633.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  634.             {
  635.                 cpox[Cobj] = Gpxl[Cpgo][1] * ob[Cpob].cscx;
  636.                 cpoy[Cobj] = Gpyl[Cpgo][0] * ob[Cpob].cscy + (atDis[Cobj]-DisPt[Cobj]);
  637.                 break;
  638.             }
  639.             DisPt[Cobj] += dis;
  640.             LastPt[Cobj] = 2;
  641.         }
  642.         if(LastPt[Cobj] == 2) 
  643.         {
  644.             dis = (Gpxl[Cpgo][1] - Gpxl[Cpgo][0]) * ob[Cpob].cscx;
  645.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  646.             {
  647.                 cpox[Cobj] = Gpxl[Cpgo][1] * ob[Cpob].cscx - (atDis[Cobj]-DisPt[Cobj]);
  648.                 cpoy[Cobj] = Gpyl[Cpgo][1] * ob[Cpob].cscy;
  649.                 break; 
  650.             }
  651.             DisPt[Cobj] += dis;
  652.             LastPt[Cobj] = 3; 
  653.         }
  654.         if(LastPt[Cobj] == 3) 
  655.         {
  656.             dis = (Gpyl[Cpgo][1] - Gpyl[Cpgo][0]) * ob[Cpob].cscy;
  657.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  658.             {
  659.                 cpox[Cobj] = Gpxl[Cpgo][0] * ob[Cpob].cscx;
  660.                 cpoy[Cobj] = Gpyl[Cpgo][1] * ob[Cpob].cscy - (atDis[Cobj]-DisPt[Cobj]);
  661.                 break;
  662.             }
  663.         }
  664.     }
  665.     else 
  666.     {
  667.         if(LastPt[Cobj] == 0) 
  668.         {
  669.             dis = (Gpyl[Cpgo][1] - Gpyl[Cpgo][0]) * ob[Cpob].cscy;
  670.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  671.             {
  672.                 cpox[Cobj] = Gpxl[Cpgo][0] * ob[Cpob].cscx;
  673.                 cpoy[Cobj] = Gpyl[Cpgo][0] * ob[Cpob].cscy + atDis[Cobj];
  674.                 break; 
  675.             }
  676.             LastPt[Cobj] = 3;
  677.             DisPt[Cobj] += dis; 
  678.         }
  679.         if(LastPt[Cobj] == 3) 
  680.         {
  681.             dis = (Gpxl[Cpgo][1] - Gpxl[Cpgo][0]) * ob[Cpob].cscx;
  682.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  683.             {
  684.                 cpox[Cobj] = Gpxl[Cpgo][0] * ob[Cpob].cscx + (atDis[Cobj]-DisPt[Cobj]);
  685.                 cpoy[Cobj] = Gpyl[Cpgo][1] * ob[Cpob].cscy;
  686.                 break;
  687.             }
  688.             DisPt[Cobj] += dis;
  689.             LastPt[Cobj] = 2;
  690.         }
  691.         if(LastPt[Cobj] == 2) 
  692.         {
  693.             dis = (Gpyl[Cpgo][1] - Gpyl[Cpgo][0]) * ob[Cpob].cscy;
  694.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  695.             {
  696.                 cpox[Cobj] = Gpxl[Cpgo][1] * ob[Cpob].cscx;
  697.                 cpoy[Cobj] = Gpyl[Cpgo][1] * ob[Cpob].cscy - (atDis[Cobj]-DisPt[Cobj]);
  698.                 break; 
  699.             }
  700.             DisPt[Cobj] += dis;
  701.             LastPt[Cobj] = 1; 
  702.         }
  703.         if(LastPt[Cobj] == 1) 
  704.         {
  705.             dis = (Gpxl[Cpgo][1] - Gpxl[Cpgo][0]) * ob[Cpob].cscx;
  706.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  707.             {
  708.                 cpox[Cobj] = Gpxl[Cpgo][1] * ob[Cpob].cscx - (atDis[Cobj]-DisPt[Cobj]);
  709.                 cpoy[Cobj] = Gpyl[Cpgo][0] * ob[Cpob].cscy;
  710.                 break;
  711.             }
  712.         }
  713.     }
  714. }
  715. return;
  716. }
  717. /****************************************************************************/
  718. function Evtest() 
  719. {
  720.     if(Active[Cobj] == 0) 
  721.     {
  722.         if(AEvent[Cevt] & eANDtest)
  723.             ActANDTest();
  724.         else
  725.             ActORTest();
  726.     }
  727.     else if(Active[Cobj] == 1) {
  728.         if(DEvent[Cevt] & eANDtest)
  729.             DeactANDTest();
  730.         else
  731.             DeactORTest();
  732.     }
  733. return;
  734. }
  735. /***************************************************************************/
  736. function ActORTest()
  737. {
  738. if(((AEvent[Cevt] & eDELAY)         && TimeCount() <= 0  ) ||
  739.   ( (AEvent[Cevt] & eOBJECT_ENTER)    && ObjectEnter(AEnter[Cevt])  ) ||
  740.   ( (AEvent[Cevt] & eOBJECT_LEAVE)     && ObjectLeave(ALeave[Cevt])  ) ||
  741.   ( (AEvent[Cevt] & eMOUSE)            && MouseSelect() > 0 ) ||
  742.   ( (AEvent[Cevt] & eMOUSE_OVER)    && MouseOver()   ) ||
  743.   ( (AEvent[Cevt] & eLMOUSE)        && IsMouseLClick()   ) ||
  744.   ( (AEvent[Cevt] & eRMOUSE)        && IsMouseRClick()   ) ||
  745.   ( (AEvent[Cevt] & eKEY)            && KeyChar()   ) ||
  746.   ( (AEvent[Cevt] & eLT_VALUE)        && ob[Cobj].val <  AValue[Cevt]) ||
  747.   ( (AEvent[Cevt] & eEQ_VALUE)        && ob[Cobj].val == AValue[Cevt]) ||
  748.   ( (AEvent[Cevt] & eGT_VALUE)        && ob[Cobj].val >  AValue[Cevt]) ||
  749.   ( (AEvent[Cevt] & eENDPATH)        && EndPath[Cobj]     )   )
  750. Active[Cobj] = 4;
  751. }
  752. /***************************************************************************/
  753. function ActANDTest()
  754. {
  755. if(((AEvent[Cevt] & eDELAY)         && !(TimeCount() <= 0)  ) ||
  756.   ( (AEvent[Cevt] & eOBJECT_ENTER)    && !ObjectEnter(AEnter[Cevt])  ) ||
  757.   ( (AEvent[Cevt] & eOBJECT_LEAVE)     && !ObjectLeave(ALeave[Cevt])  ) ||
  758.   ( (AEvent[Cevt] & eMOUSE)            && !(MouseSelect() > 0) ) ||
  759.   ( (AEvent[Cevt] & eMOUSE_OVER)    && !MouseOver()   ) ||
  760.   ( (AEvent[Cevt] & eLMOUSE)        && !IsMouseLClick()   ) ||
  761.   ( (AEvent[Cevt] & eRMOUSE)        && !IsMouseRClick()   ) ||
  762.   ( (AEvent[Cevt] & eKEY)            && !KeyChar()   ) ||
  763.   ( (AEvent[Cevt] & eLT_VALUE)        && !(ob[Cobj].val <  AValue[Cevt])) ||
  764.   ( (AEvent[Cevt] & eEQ_VALUE)        && !(ob[Cobj].val == AValue[Cevt])) ||
  765.   ( (AEvent[Cevt] & eGT_VALUE)        && !(ob[Cobj].val >  AValue[Cevt])) ||
  766.   ( (AEvent[Cevt] & eENDPATH)        && !EndPath[Cobj]     )   )
  767.   {} else Active[Cobj] = 4;
  768. }
  769. /***************************************************************************/
  770. function DeactORTest()
  771. {
  772.  
  773. if(((DEvent[Cevt] & eDELAY)         && TimeCount() <= 0  ) ||
  774.   ( (DEvent[Cevt] & eOBJECT_ENTER)    && ObjectEnter(DEnter[Cevt])  ) ||
  775.   ( (DEvent[Cevt] & eOBJECT_LEAVE)     && ObjectLeave(DLeave[Cevt])  ) ||
  776.   ( (DEvent[Cevt] & eMOUSE)            && MouseSelect() > 0 ) ||
  777.   ( (DEvent[Cevt] & eMOUSE_OVER)    && !MouseOver()   ) ||
  778.   ( (DEvent[Cevt] & eLMOUSE)        && IsMouseLClick()   ) ||
  779.   ( (DEvent[Cevt] & eRMOUSE)        && IsMouseRClick()   ) ||
  780.   ( (DEvent[Cevt] & eKEY)            && KeyChar()   ) ||
  781.   ( (DEvent[Cevt] & eLT_VALUE)        && ob[Cobj].val <  AValue[Cevt]) ||
  782.   ( (DEvent[Cevt] & eEQ_VALUE)        && ob[Cobj].val == AValue[Cevt]) ||
  783.   ( (DEvent[Cevt] & eGT_VALUE)        && ob[Cobj].val >  AValue[Cevt]) ||
  784.   ( (DEvent[Cevt] & eENDPATH)        && EndPath[Cobj]     )   )
  785.     Active[Cobj] = 2;
  786. }
  787. /***************************************************************************/
  788. function DeactANDTest()
  789. {
  790. if(((DEvent[Cevt] & eDELAY)         && !(TimeCount() <= 0)  ) ||
  791.   ( (DEvent[Cevt] & eOBJECT_ENTER)    && !ObjectEnter(DEnter[Cevt])  ) ||
  792.   ( (DEvent[Cevt] & eOBJECT_LEAVE)     && !ObjectLeave(DLeave[Cevt])  ) ||
  793.   ( (DEvent[Cevt] & eMOUSE)            && !(MouseSelect() > 0) ) ||
  794.   ( (DEvent[Cevt] & eMOUSE_OVER)    && !MouseOver()   ) ||
  795.   ( (DEvent[Cevt] & eLMOUSE)        && !IsMouseLClick()   ) ||
  796.   ( (DEvent[Cevt] & eRMOUSE)        && !IsMouseRClick()   ) ||
  797.   ( (DEvent[Cevt] & eKEY)            && !KeyChar()   ) ||
  798.   ( (DEvent[Cevt] & eLT_VALUE)        && !(ob[Cobj].val <  AValue[Cevt])) ||
  799.   ( (DEvent[Cevt] & eEQ_VALUE)        && !(ob[Cobj].val == AValue[Cevt])) ||
  800.   ( (DEvent[Cevt] & eGT_VALUE)        && !(ob[Cobj].val >  AValue[Cevt])) ||
  801.   ( (DEvent[Cevt] & eENDPATH)        && !EndPath[Cobj]     )   )
  802.   {} else Active[Cobj] = 2;
  803. }
  804. /**************************************************************************/
  805. function TimeCount() {
  806.     if(TimeLeft[Cobj] > 0)  
  807.     {
  808.         if(isNav4) TimeLeft[Cobj] -= 2;
  809.         else       TimeLeft[Cobj] -= 1;
  810.     }
  811.     return (TimeLeft[Cobj]);
  812. }
  813.  
  814. function ObjectEnter(eobj) {
  815. x = Gszx[Cgeo] * ob[Cobj].cscx;
  816. y = Gszy[Cgeo] * ob[Cobj].cscy;
  817. if ( cpox[eobj] >= (cpox[Cobj] - x) && cpox[eobj] <= (cpox[Cobj]) + x &&
  818.       cpoy[eobj] >= (cpoy[Cobj] - y) && cpoy[eobj] <= (cpoy[Cobj]) + y )
  819.     return 1;
  820. return 0;
  821. }
  822.  
  823. function ObjectLeave(eobj) {
  824. x = Gszx[Cgeo] * ob[Cobj].cscx;
  825. y = Gszy[Cgeo] * ob[Cobj].cscy;
  826. if ( cpox[eobj] >= cpox[Cobj] - x && cpox[eobj] <= cpox[Cobj] + x &&
  827.      cpoy[eobj] >= cpoy[Cobj] - y && cpoy[eobj] <= cpoy[Cobj] + y )
  828.     return 0;
  829. return 1;
  830. }
  831.  
  832. function MouseSelect() {
  833. var val = 0;
  834. if(smx == -99999) return val;
  835. x = Gszx[Cgeo] * ob[Cobj].cscx;
  836. y = Gszy[Cgeo] * ob[Cobj].cscy;
  837. if ( smx >= cpox[Cobj] - x && smx <= cpox[Cobj] + x &&
  838.      smy >= cpoy[Cobj] - y && smy <= cpoy[Cobj] + y )
  839.     return val = 1;
  840. return val;
  841. }
  842.  
  843. function MouseOver() {
  844. x = Gszx[Cgeo] * ob[Cobj].cscx;
  845. y = Gszy[Cgeo] * ob[Cobj].cscy;
  846. if ( cmx >= cpox[Cobj] - x && cmx <= cpox[Cobj] + x &&
  847.      cmy >= cpoy[Cobj] - y && cmy <= cpoy[Cobj] + y )
  848.     return 1;
  849. return 0;
  850. }
  851.  
  852. function IsMouseLClick() {
  853. return (slm && 1);
  854. }
  855.  
  856. function IsMouseRClick() {
  857. return (slm && 2);
  858. }
  859.  
  860. function KeyChar() {
  861. if(!sky) return 0;
  862. if(isNav4 && (AKey[Cevt] == sky)) return 1;
  863. if(isIE4  && (IKey[Cevt] == sky)) return 1;
  864. return 0;
  865. }
  866.  
  867. /***************************************************************************/
  868. function isDeactive() {
  869.     if(PathCount[Cobj] != 0) UpdPos();
  870.     if(Gtyp[Cgeo] & GEO_COUNT) UpdStr();
  871. return;
  872. }
  873. /***************************************************************************/
  874. function isActive() {
  875.     if(PathCount[Cobj] != 0) UpdPos();
  876.     if(Gtyp[Cgeo] & GEO_COUNT) UpdStr();
  877. return;
  878. }
  879. /***************************************************************************/
  880. function whenActive()
  881. {
  882.     Active[Cobj]  = 1;
  883.     EndPath[Cobj] = 0;
  884.  
  885.     if(!Cevt) {
  886.         PathCount[Cobj] = -1;
  887.         TimeLeft[Cobj]  =  0;
  888.     }
  889.  
  890.     // set default active events
  891.     if(!Cevt)
  892.     {
  893.         PathCount[Cobj] = 0;
  894.         ob[Cobj].style.visibility = "visible";
  895.     }
  896.     else
  897.     {
  898.         if(WAEvent[Cevt] & (1<<14)) window.location=WALink[Cevt];
  899.         if(WAEvent[Cevt] & (1<<15)) window.location=WALink[Cevt];
  900.  
  901.         if(WAEvent[Cevt] & 16) {    }    //sound
  902.         if(WAEvent[Cevt] & 8) ob[Cobj].style.visibility = "visible";
  903.         else                  ob[Cobj].style.visibility = "hidden";
  904.  
  905.         TimeLeft[Cobj]  = DTime[Cevt];
  906.  
  907.         if(WAEvent[Cevt] & (1<<5)) Active[WAAObj[Cevt]] = 4;
  908.         if(WAEvent[Cevt] & (1<<7)) Active[WADObj[Cevt]] = 2;
  909.  
  910.         // apply value
  911.         if(WAEvent[Cevt] & (1<<13)) {
  912.             if       ((OpForm[Cevt] & 0x000f) == 0)
  913.                 ob[Cobj].val  = WAForm[Cevt];
  914.             else if((OpForm[Cevt] & 0x000f) == 1)
  915.                 ob[Cobj].val += WAForm[Cevt];
  916.             else if((OpForm[Cevt] & 0x000f) == 2)
  917.                 ob[Cobj].val -= WAForm[Cevt];
  918.             else if((OpForm[Cevt] & 0x000f) == 3)
  919.                 ob[Cobj].val *= WAForm[Cevt];
  920.             else if((OpForm[Cevt] & 0x000f) == 4)
  921.                 if(WAForm[Cevt] != 0) ob[Cobj].val /= WAForm[Cevt];
  922.         }
  923.         // get value
  924.         if(WAEvent[Cevt] & (1<<11)) {
  925.             if       ((WAGOp[Cevt] & 0x000f) == 0)
  926.                 ob[Cobj].val  = ob[WAGVal[Cevt]].val;
  927.             else if((WAGOp[Cevt] & 0x000f) == 1)
  928.                 ob[Cobj].val += ob[WAGVal[Cevt]].val;
  929.             else if((WAGOp[Cevt] & 0x000f) == 2)
  930.                 ob[Cobj].val -= ob[WAGVal[Cevt]].val;
  931.             else if((WAGOp[Cevt] & 0x000f) == 3)
  932.                 ob[Cobj].val*= ob[WAGVal[Cevt]].val;
  933.             else if((WAGOp[Cevt] & 0x000f) == 4)
  934.                 if(ob[WAGVal[Cevt]].val != 0) ob[Cobj].val /= ob[WAGVal[Cevt]].val;
  935.         }
  936.         // send result
  937.         if(WAEvent[Cevt] & (1<<9)) {
  938.             if       ((WASOp[Cevt] & 0x000f) == 0)
  939.                 ob[WASVal[Cevt]].val  = ob[Cobj].val;
  940.             else if((WASOp[Cevt] & 0x000f) == 1)
  941.                 ob[WASVal[Cevt]].val += ob[Cobj].val;
  942.             else if((WASOp[Cevt] & 0x000f) == 2)
  943.                 ob[WASVal[Cevt]].val -= ob[Cobj].val;
  944.             else if((WASOp[Cevt] & 0x000f) == 3)
  945.                 ob[WASVal[Cevt]].val *= ob[Cobj].val;
  946.             else if((WASOp[Cevt] & 0x000f) == 4)
  947.                 if(ob[Cobj].val != 0) ob[WASVal[Cobj]].val /= ob[Cobj].val;
  948.         }
  949.         if(WAEvent[Cevt] & 4) PathCount[Cobj] = MCount[Cact]; // motion
  950. //        if(WAEvent[Cevt] & (1<<30)) reset(Cobj);
  951.         // replace current object components
  952.         if(WAEvent[Cevt] & (1<<17))
  953.         {
  954.             if(WAEvent[Cevt] & (1<<18)) {
  955.                 ob[Cobj].name = Gnam[WACgeo[Cevt]];
  956.                 ob[Cobj].geo  = WACgeo[Cevt];
  957.             }
  958.             if(WAEvent[Cevt] & (1<<19)) ob[Cobj].att  = WACatt[Cevt];
  959.             if(WAEvent[Cevt] & (1<<20)) ob[Cobj].act  = WACact[Cevt];
  960.             if(WAEvent[Cevt] & (1<<22)) ob[Cobj].evt  = WACevt[Cevt];
  961.             spox[Cobj] = cpox[Cobj];  
  962.             spoy[Cobj] = cpoy[Cobj];
  963.             SetPath(Cobj);
  964.         }
  965.         // replace additional object components
  966.         for(ref=0; ref< WACobj[Cevt]; ref++) {
  967.             if(WAEvent[Cevt] & (1<<18)) {
  968.                 ob[WANobj[Cevt][ref]].name = Gnam[WACgeo[Cevt]];
  969.                 ob[WANobj[Cevt][ref]].geo  = WACgeo[Cevt];
  970.             }
  971.             if(WAEvent[Cevt] & (1<<19)) ob[WANobj[Cevt][ref]].att  = WACatt[Cevt];
  972.             if(WAEvent[Cevt] & (1<<20)) ob[WANobj[Cevt][ref]].act  = WACact[Cevt];
  973.             if(WAEvent[Cevt] & (1<<22)) ob[WANobj[Cevt][ref]].evt  = WACevt[Cevt];
  974.             spox[WANobj[Cevt][ref]] = cpox[Cobj];  
  975.             spoy[WANobj[Cevt][ref]] = cpoy[Cobj];
  976.             SetPath(WANobj[Cevt][ref]);
  977.         }
  978.  
  979. //window.status = " Cobj=" + Cobj + " ob[Cobj].val=" + ob[Cobj].val;
  980.         if(WAEvent[Cevt] & (1<<30)) reset(Cobj);
  981.     }
  982. }
  983. //**************************************************************************
  984. function whenDeactive()
  985. {
  986.  
  987.     EndPath[Cobj] = 0;
  988.     Active[Cobj]  = 0;    // is deactive
  989.  
  990.     if(!Cevt) 
  991.     {
  992.         PathCount[Cobj] = -1;
  993.         TimeLeft[Cobj]  =  0;
  994.         ob[Cobj].style.visibility = "hidden";
  995.     }
  996.     else
  997.     {
  998.         if(WDEvent[Cevt] & 4) PathCount[Cobj] = MCount[Cact]; // motion
  999.         if(WDEvent[Cevt] & (1<<30)) reset(Cobj);
  1000.  
  1001.         if(WDEvent[Cevt] & 16) {    }    //sound
  1002.         if(WDEvent[Cevt] & 8) ob[Cobj].style.visibility = "visible";
  1003.         else                  ob[Cobj].style.visibility = "hidden";
  1004.  
  1005.         TimeLeft[Cobj]  = ATime[Cevt];
  1006.         if(WDEvent[Cevt] & 4) PathCount[Cobj] = MCount[Cact];    // motion
  1007.         else                  PathCount[Cobj] = 0;
  1008.  
  1009.         if(WDEvent[Cevt] & (1<<5)) Active[WDAObj[Cevt]] = 4;
  1010.         if(WDEvent[Cevt] & (1<<7)) Active[WDDObj[Cevt]] = 2;
  1011.     }
  1012.  
  1013. }
  1014. //**************************************************************************
  1015. function reset(cobj) {
  1016.  
  1017.     cevt = ob[cobj].evt;
  1018.     catt = ob[cobj].att;
  1019.     cact = ob[cobj].act;
  1020.     cgrp = ob[cobj].grp;
  1021.     cgeo = ob[cobj].geo;
  1022.  
  1023.     Active[cobj]    =  0;    // is deactive
  1024.     if(cevt)
  1025.     {
  1026.         if(WDEvent[cevt] & 8) ob[cobj].style.visibility = "visible";
  1027.         else                  ob[cobj].style.visibility = "hidden";
  1028.         if(WDEvent[cevt] & (1<<31)) {
  1029.             PathCount[cobj] = MCount[cact];            // restart path
  1030.             cpox[cobj] = spox[cobj];
  1031.             cpoy[cobj] = spoy[cobj];
  1032.             LastPt[cobj] = 0;
  1033.             atDis[cobj] = 0;
  1034.             DisPt[cobj] = 0;
  1035.             EndPath[cobj] = 0;
  1036.         }
  1037.         if(!(WDEvent[cevt] & 4)) PathCount[cobj] = 0;    // no motion
  1038.         TimeLeft[cobj]  = ATime[cevt];
  1039.     }
  1040.     else
  1041.     {
  1042.         if(ob[cobj].flg & 64)
  1043.             ob[cobj].style.visibility = "hidden";
  1044.         else
  1045.             ob[cobj].style.visibility = "visible";
  1046.  
  1047.         // set action variables
  1048.         if(cact) PathCount[cobj] = MCount[cact]; // motion
  1049.         else     PathCount[cobj] = 0;
  1050.         TimeLeft[cobj]  = 0;
  1051.  
  1052.         cpox[cobj] = spox[cobj];
  1053.         cpoy[cobj] = spoy[cobj];
  1054.         LastPt[cobj] = 0;
  1055.         atDis[cobj] = 0;
  1056.         DisPt[cobj] = 0;
  1057.         EndPath[cobj] = 0;
  1058.     }
  1059.  
  1060.     if(cgeo)
  1061.     {
  1062.         ob[cobj].style.left=cpox[cobj] - Gszx[cgeo] * ob[cobj].cscx;
  1063.         ob[cobj].style.top =cpoy[cobj] - Gszy[cgeo] * ob[cobj].cscy;
  1064.     }
  1065.  
  1066. return;
  1067. }
  1068.  
  1069. /*************************************************************************/
  1070. function SetPath(cobj) {
  1071.  
  1072.     cevt = ob[cobj].evt;    // Objects event
  1073.     catt = ob[cobj].att;    // Objects attribute
  1074.     cact = ob[cobj].act;    // Objects action
  1075.     cgrp = ob[cobj].grp;    // Objects group
  1076.     cgeo = ob[cobj].geo;    // Objects geometry
  1077.     cpob = MPath[cact];        // Object actions path object
  1078.     cpgo = ob[cpob].geo;    // Path objects geometry
  1079.     lstVal[cobj] = ob[cobj].val - 100;
  1080.  
  1081.     MDir[cobj] = -1;
  1082.  
  1083.     if(!cact) {
  1084.         Plen[cobj] = 0;
  1085.         noStep = 0;
  1086.         disStep[cobj] = 0;
  1087.         dpox[cobj] = 0;
  1088.         dpoy[cobj] = 0;
  1089.         PathCount[cobj] = 0;
  1090.     }
  1091.     else {
  1092.         PathCount[cobj] = MCount[cact];
  1093.  
  1094.         if(MType[cact] & ACT_XPATH_MOUSE || MType[cact] & ACT_YPATH_MOUSE) { //^^ replaced with linPath??
  1095.             Plen[cobj] = 1;
  1096.             noStep = 1;
  1097.             disStep[cobj] = 1;
  1098.             dpox[cobj] = 0;
  1099.             dpoy[cobj] = 0;
  1100.         }
  1101.         else if(MType[cact] & ACT_XPATH_OBJPTH || MType[cact] & ACT_XPATH_OBJXYZ) {
  1102.             objPath(cobj,cpob);
  1103.         }
  1104.         else
  1105.         {
  1106.             linPath(cobj);
  1107.         }
  1108.     }
  1109.     cpox[cobj] = spox[cobj];
  1110.     cpoy[cobj] = spoy[cobj];
  1111.     LastPt[cobj] = 0;
  1112.     atDis[cobj] = 0;
  1113.     DisPt[cobj] = 0;
  1114.     EndPath[cobj] = 0;
  1115.  
  1116. //    ob[cobj].left=cpox[cobj] - Gszx[cgeo];
  1117. //    ob[cobj].top =cpoy[cobj] - Gszy[cgeo];
  1118.     return;
  1119. }
  1120.  
  1121. function objPath(cobj,cpob) 
  1122. {
  1123.     if        ((Gtyp[cpob] & GEO_TYPE) == 1) {    
  1124.         spox[cobj] = Gpxl[cpgo][0] * ob[cpob].cscx + ob[cpob].cpox;  
  1125.         spoy[cobj] = Gpyl[cpgo][0] * ob[cpob].cscy + ob[cpob].cpoy;
  1126.     }
  1127.     else if    ((Gtyp[cpob] & GEO_TYPE) == 2) {
  1128.         spox[cobj] = (Gpxl[cpgo][0] - Gpxl[cpob][1]) * ob[cpob].cscx + ob[cpob].cpox;
  1129.         spoy[cobj] = (Gpyl[cpgo][0] - Gpyl[cpob][1]) * ob[cpob].cscy + ob[cpob].cpoy;
  1130.     }
  1131.     else if    ((Gtyp[cpob] & GEO_TYPE) == 3) {
  1132.         spox[cobj] = Gpxl[cpgo][0] * ob[cpob].cscx + ob[cpob].cpox;
  1133.         spoy[cobj] = Gpyl[cpgo][0] * ob[cpob].cscy + ob[cpob].cpoy;
  1134.     }
  1135.  
  1136.     getPathLenth(cobj,cpob,cpgo);
  1137.     if(cact)
  1138.         noStep  = Math.abs(Plen[cobj] / MRate[cact]);
  1139.     else
  1140.         noStep = 0;
  1141.     if(noStep < 1) noStep = 1;
  1142.     disStep[cobj] = Plen[cobj] / noStep;
  1143.  
  1144.     return;
  1145. }
  1146. //****************************************************************************
  1147. function getPathLenth(cobj,cpob,cgeo)
  1148. // return lenth of transformed path
  1149. {
  1150.     var i, x = 0.0, y = 0.0;
  1151.     Plen[cobj] = 0;
  1152.     // find length of rectangle
  1153.     if        ((Gtyp[cgeo] & GEO_TYPE) == 1) {
  1154.         Plen[cobj] = 2 * (Gpxl[cgeo][1] - Gpxl[cgeo][0]) * ob[cpob].cscx
  1155.                    + 2 * (Gpyl[cgeo][1] - Gpyl[cgeo][0]) * ob[cpob].cscy;
  1156.     }
  1157.     // find length of ellipse
  1158.     else if    ((Gtyp[cgeo] & GEO_TYPE) == 2) {
  1159.         Plen[cobj] = 360;
  1160.     }
  1161.     // find length of polygon
  1162.     else if    ((Gtyp[cgeo] & GEO_TYPE) == 3) {
  1163.         for ( i = 1; i < Gnpt[cgeo]; i++)
  1164.         {
  1165.             x = (Gpxl[cgeo][i] - Gpxl[cgeo][i-1]) * ob[cpob].cscx;
  1166.             y = (Gpyl[cgeo][i] - Gpyl[cgeo][i-1]) * ob[cpob].cscy;
  1167.             Plen[cobj] += Math.sqrt(x*x + y*y);
  1168.         }
  1169.  
  1170.         if(!(Gtyp[cgeo] & GEO_OPEN))
  1171.         {
  1172.             x = (Gpxl[cgeo][Gnpt[cgeo]-1] - Gpxl[cgeo][0]) * ob[cpob].cscx;
  1173.             y = (Gpyl[cgeo][Gnpt[cgeo]-1] - Gpyl[cgeo][0]) * ob[cpob].cscy;
  1174.             Plen[cobj] += Math.sqrt(x*x + y*y);
  1175.         }
  1176.     }
  1177. }
  1178.  
  1179. //************************************************************************************
  1180. function linPath(cobj) {
  1181. var epox = spox[cobj];
  1182. var epoy = spoy[cobj];
  1183.  
  1184.     if(MType[cact] & ACT_YPATH_UP) {
  1185.         if(MType[cact] & ACT_PATH_CENTER) {
  1186.             spoy[cobj]     += mH;
  1187.             epoy        -= mH;
  1188.         }
  1189.         else if(MType[cact] & ACT_PATH_END) {
  1190.             spoy[cobj]     += mH;
  1191.         }
  1192.         else if(MType[cact] & ACT_PATH_START) {
  1193.             epoy        -= mH;
  1194.         }
  1195.     }
  1196.     else if(MType[cact] & ACT_YPATH_DOWN) {
  1197.         if(MType[cact] & ACT_PATH_START) {
  1198.             epoy       += mH;
  1199.         }
  1200.         else if(MType[cact] & ACT_PATH_END) {
  1201.             spoy[cobj]     -= mH;
  1202.         }
  1203.         else if(MType[cact] & ACT_PATH_CENTER) {
  1204.             spoy[cobj]     -= mH;
  1205.             epoy        += mH;
  1206.         }
  1207.     }
  1208.     else if(MType[cact] & ACT_YPATH_MOUSE) {
  1209.         Plen[cobj] = 1;
  1210.         noStep = 1;
  1211.         disStep[cobj] = 1;
  1212.         dpoy[cobj] = 0;
  1213.         spoy[cobj] = cpoy[cobj];
  1214.     }
  1215.  
  1216.     if(MType[cact] & ACT_XPATH_LEFT) {
  1217.         if(MType[cact] & ACT_PATH_CENTER) {
  1218.             spox[cobj]     += mW;
  1219.             epox        -= mW;
  1220.         }
  1221.         else if(MType[cact] & ACT_PATH_END) {
  1222.             spox[cobj]     += mW;
  1223.         }
  1224.         else if(MType[cact] & ACT_PATH_START) {
  1225.             epox        -= mW;
  1226.         }
  1227.     }
  1228.     else if(MType[cact] & ACT_XPATH_RIGHT) {
  1229.         if(MType[cact] & ACT_PATH_START) {
  1230.             epox        += mW;
  1231.         }
  1232.         else if(MType[cact] & ACT_PATH_END) {
  1233.             spox[cobj]     -= mW;
  1234.         }
  1235.         else if(MType[cact] & ACT_PATH_CENTER) {
  1236.             spox[cobj]     -= mW;
  1237.             epox        += mW;
  1238.         }
  1239.     }
  1240.     else if(MType[cact] & ACT_YPATH_MOUSE) {
  1241.         Plen[cobj] = 1;
  1242.         noStep = 1;
  1243.         disStep[cobj] = 1;
  1244.         dpox[cobj] = 0;
  1245.         spox[cobj] = cpox[cobj];
  1246.     }
  1247.     var x = epox - spox[cobj];
  1248.     var y = epoy - spoy[cobj];
  1249.     if(x+y)
  1250.     {
  1251.         Plen[cobj] = Math.sqrt(x*x + y*y);
  1252.         noStep  = Math.abs(Plen[cobj] / MRate[cact]);
  1253.         if(noStep < 1) noStep = 1;
  1254.         disStep[cobj] = Plen[cobj] / noStep;
  1255.         dpox[cobj] = x / noStep;
  1256.         dpoy[cobj] = y / noStep;
  1257.     }
  1258.     else
  1259.     {
  1260.         Plen[cobj] = 0;
  1261.         dpox[cobj] = 0;
  1262.         dpoy[cobj] = 0;
  1263.         disStep[cobj] = 0;
  1264.     }
  1265.     return
  1266. }
  1267. //window.status = " Deact cobj=" + cobj + " WDEvent[Cevt] & (1<<5)=" + WDEvent[Cevt] & (1<<5) + " Active[WDAObj[Cevt]]=" + Active[WDAObj[Cevt]];
  1268. //if(Cobj==2) window.status = " Cobj=" + Cobj + " ob[Cobj].val=" + ob[Cobj].val;
  1269. //-->
  1270.